-- OpenResty Lua 脚本
-- 用于实现更复杂的灰度发布和流量劫持逻辑

local function is_gray_user(user_id)
    -- 灰度用户判断逻辑
    -- 示例：用户 ID 尾号为 0-2 的用户走灰度
    if not user_id then
        return false
    end
    
    local last_char = string.sub(user_id, -1)
    return last_char >= "0" and last_char <= "2"
end

local function get_gray_header()
    -- 检查灰度 Header
    local gray_header = ngx.req.get_headers()["X-Gray-Release"]
    return gray_header == "true"
end

local function should_route_to_gray()
    -- 判断是否应该路由到灰度环境
    local user_id = ngx.var.http_x_user_id
    
    -- 检查 Header 标识
    if get_gray_header() then
        return true
    end
    
    -- 检查用户 ID
    if user_id and is_gray_user(user_id) then
        return true
    end
    
    -- 检查 IP 段（示例）
    local client_ip = ngx.var.remote_addr
    if client_ip then
        -- 示例：特定 IP 段走灰度
        if string.match(client_ip, "^192%.168%.1%.") then
            return true
        end
    end
    
    return false
end

-- 路由决策
if should_route_to_gray() then
    ngx.var.backend = "gateway-gray:8080"
    ngx.log(ngx.INFO, "路由到灰度环境")
else
    ngx.var.backend = "gateway:8080"
    ngx.log(ngx.INFO, "路由到主环境")
end


